package utils;

import android.content.Context;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.AbsoluteSizeSpan;
import android.widget.TextView;

import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * ltx on 2016/12/1 14:52
 * 数据类型处理
 *
 */
public class DecimalUtils {
    /**
     *
     * @param mDouble double
     * @return 小数点后的两位不是00或者0的话就去除小数点 或者直接显示带上小数点后两位
     */
    public static String doubleToIntOrD(Double mDouble){
        if(null==mDouble){
            return "";
        }
        String mStrResultTemp;
        String mStrResult;
        DecimalFormat df   = new DecimalFormat("######0.00");
        mStrResultTemp=df.format(mDouble);
//        String number = "123.456";
//        System.out.println(number.split("\\.")[0]);
        if(mStrResultTemp.split("\\.")[1].equals("00")){
            mStrResult=mStrResultTemp.split("\\.")[0];
        }else{
            mStrResult=mStrResultTemp;
        }
        return mStrResult;
    }
    /**
     * @param prise      格式化后的价格
     * @param mTv        view
     * @param mPriceSize 价格的大小
     * @param mYuanSize  元字体的大小
     */

    public static void setPriceText(Context mContext, String prise, TextView mTv, int mPriceSize, int mYuanSize) {
        prise += "元";
        int end = prise.length();
        Spannable textSpan = new SpannableStringBuilder(prise);
        textSpan.setSpan(new AbsoluteSizeSpan(SizeUtils.dp2px(mContext, mPriceSize)), 0, end - 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        textSpan.setSpan(new AbsoluteSizeSpan(SizeUtils.dp2px(mContext, mYuanSize)), end - 1, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        mTv.setText(textSpan);
    }

    /**
     * 设置卡券的标题(数字变大汉子变小)
     * @param mContext
     * @param title
     * @param mTv
     * @param mPriceSize 数字大小
     * @param mYuanSize  汉子大小
     */
    public static void setKaQuanTitle(Context mContext, String title, TextView mTv, int mPriceSize, int mYuanSize){
        if (StringUtils.isNull(title))
            return;
        Spannable textSpan = new SpannableStringBuilder(title);
        textSpan.setSpan(new AbsoluteSizeSpan(SizeUtils.dp2px(mContext, mYuanSize)),0,title.length() ,Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        //正则表达式提取手机号
        Pattern pattern = Pattern.compile("\\d+(\\.\\d+)?");
        Matcher matcher = pattern.matcher(title);
        while (matcher.find()) {
            String number=matcher.group();
            int first = title.indexOf(number);
            int end=first+number.length();
            textSpan.setSpan(new AbsoluteSizeSpan(SizeUtils.dp2px(mContext, mPriceSize)), first, end, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
            StringBuffer bf=new StringBuffer();
            for (int i = 0; i <number.length() ; i++) {
                bf.append("^");
            }
            title=title.replaceFirst("\\d+(\\.\\d+)?",bf.toString());
        }
        mTv.setText(textSpan);

    }

    /**
     * 小数点取一位
     * @return
     */
    public static String getDistaceText(double dis){
        DecimalFormat df = new DecimalFormat("###.0");
        String distance=df.format(dis);
        return distance;
    }

    /*
  * 判断是否为整数
  * @param str 传入的字符串
  * @return 是整数返回true,否则返回false
*/


    public static boolean isInteger(String str) {
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
        return pattern.matcher(str).matches();
    }

    /**
     *
     * 价格样式 小数点必须有两位 将小数点后面的字体大小变小
     * @param mPrice 价格
     * @param textSize1 小数点前面的数字 px
     * @param textSize2 小数点后面的数字 px
     * @param isNeedStr 是否需要人民币￥符号
     * @return 小数点后面字体变小的样式
     */
    public static SpannableStringBuilder setPriceStyle(Context mContext,double mPrice,int textSize1,int textSize2 ,boolean isNeedStr){
        String mStrResultTemp;
        DecimalFormat df = new DecimalFormat("######0.00");
        mStrResultTemp = df.format(mPrice);
        SpannableStringBuilder textSpan ;
        if (mStrResultTemp.split("\\.")[1].equals("00")) {//整数直接显示
            if (isNeedStr) {//需要人民币符号
                mStrResultTemp = new StringBuilder("￥").append(mStrResultTemp.split("\\.")[0]).toString();
            } else {
                mStrResultTemp = mStrResultTemp.split("\\.")[0];
            }
            textSpan = new SpannableStringBuilder(mStrResultTemp);
            if(isNeedStr){//加了人民币符号 让人民币符号跟小数点后面数字大小一样大
                textSpan.setSpan(new AbsoluteSizeSpan( mContext.getResources().getDimensionPixelSize(textSize2), false), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                textSpan.setSpan(new AbsoluteSizeSpan( mContext.getResources().getDimensionPixelSize(textSize1), false), 1, mStrResultTemp.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

            }else{
                textSpan.setSpan(new AbsoluteSizeSpan( mContext.getResources().getDimensionPixelSize(textSize1), false), 0, mStrResultTemp.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

            }
        } else {//非整数 将小数点后面的变小 小数点前面的变大
            if (isNeedStr) {//需要人民币符号
                mStrResultTemp = new StringBuilder("￥").append(mStrResultTemp).toString();
            }
            int index=mStrResultTemp.indexOf(".");
            textSpan = new SpannableStringBuilder(mStrResultTemp);
            if (isNeedStr){//用了人民币符号 让人民币符号跟小数点后面数字大小一样大
                textSpan.setSpan(new AbsoluteSizeSpan(  mContext.getResources().getDimensionPixelSize(textSize2), false), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                textSpan.setSpan(new AbsoluteSizeSpan(  mContext.getResources().getDimensionPixelSize(textSize1), false), 1, index+1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                textSpan.setSpan(new AbsoluteSizeSpan(  mContext.getResources().getDimensionPixelSize(textSize2), false), index+1, mStrResultTemp.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

            }else{
                textSpan.setSpan(new AbsoluteSizeSpan(  mContext.getResources().getDimensionPixelSize(textSize1), false), 0, index+1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
                textSpan.setSpan(new AbsoluteSizeSpan(  mContext.getResources().getDimensionPixelSize(textSize2), false), index+1, mStrResultTemp.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);

            }
        }
        return textSpan;
    }

    /**
     * 设置文本大小
     * @param mText 设置的文本
     * @param textSize 大小px
     * @return SpannableStringBuilder
     */

    public static SpannableStringBuilder setStringSize( String mText, int textSize) {
        if (StringUtils.isNull(mText)) {
            return null;
        }
        SpannableStringBuilder textSpan = new SpannableStringBuilder(mText);
        textSpan.setSpan(new AbsoluteSizeSpan(textSize, false), 0, mText.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
        return textSpan;
    }
}
